热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

首部|接口类型_OSI7层模型&TCP/IP协议首部封装格式解析

篇首语:本文由编程笔记#小编为大家整理,主要介绍了OSI 7层模型 & TCP/IP协议首部封装格式解析相关的知识,希望对你有一定的参考价值。 概述 物理层:主要定义物理设备标准&#

篇首语:本文由编程笔记#小编为大家整理,主要介绍了OSI 7层模型 & TCP/IP协议首部封装格式解析相关的知识,希望对你有一定的参考价值。



概述


  1. 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

  2. 数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1(端到端)

  3. 网络层:为在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。(主机(ip)到主机(ip))

  4. 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做。( 端口(ip+port)到端口(ip+port))

  5. 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。

  6. 表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。

  7. 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。


TCP数据包的封装格式


不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。


以太网帧首部


/* default snap length (maximum bytes per packet to capture) */
#define SNAP_LEN 1518
/* ethernet headers are always exactly 14 bytes [1] */
#define SIZE_ETHERNET 14
/* Ethernet addresses are 6 bytes */
#define ETHER_ADDR_LEN 6
/* Ethernet header */
struct sniff_ethernet
u_char ether_dhost[ETHER_ADDR_LEN]; /* destination host address */
u_char ether_shost[ETHER_ADDR_LEN]; /* source host address */
u_short ether_type; /* IP? ARP? RARP? etc */
;

IP首部



IP是TCP/IP协议簇中最为重要的协议。所有的TCP,UDP, ICMP和IGMP数据都以IP数据报格式传输IP提供的是不可靠、无连接的协议


/* IP header */
struct sniff_ip
u_char ip_vhl; /* version <<4 | header length >> 2 &#xff08;8bits&#xff09;待分割*/
u_char ip_tos; /* type of service&#xff08;8bits&#xff09; */
u_short ip_len; /* total length&#xff08;16bits&#xff09; 这个是ip包长度&#xff0c;区分首部长度*/
u_short ip_id; /* identification&#xff08;16bits&#xff09; 认证 */
u_short ip_off; /* fragment offset field&#xff08;16bits&#xff09;待分割 */
/*下面三个成员项是对ip_off的借位&#xff0c;u_short共2Bytes即16bits&#xff0c;0x代表16进制位&#xff0c;且每个16进制位对应拓展成4个二进制位*/
#define IP_RF 0x8000 /* reserved fragment flag&#xff08;1bits&#xff09; 保留位 */
#define IP_DF 0x4000 /* dont fragment flag&#xff08;1bits&#xff09; 分片位 */
#define IP_MF 0x2000 /* more fragments flag&#xff08;1bits&#xff09; "是否更多"位 */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits&#xff08;13bits&#xff09; */
u_char ip_ttl; /* time to live TTL*/
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src,ip_dst; /* source and dest address */
;
#define IP_HL(ip) (((ip)->ip_vhl) & 0x0f) /* Header Length (4bits)*/
#define IP_V(ip) (((ip)->ip_vhl) >> 4) /* Version (4bits)*/

TCP首部



TCP提供一种面向连接的、可靠的字节流服务。如果不计选项字段&#xff0c;它通常是20个字节。



  • 4位头部长度&#xff1a; 标识该tcp头部有多少个32bit字&#xff08;4字节&#xff09;因为4位最大能表示15&#xff0c;所以tcp头部最长是60字节。

  • 6位标志位&#xff08;即图中的保留6位&#xff09;&#xff1a;标志位有如下几项

  • URG标志&#xff0c;表示紧急指针是否有效

  • ACK标志&#xff0c;表示确认号是否有效。称携带ACK标志的tcp报文段为确认报文段

  • PSH标志&#xff0c;提示接收端应用程序应该立即从tcp接受缓冲区中读走数据&#xff0c;为接受后续数据腾出空间&#xff08;如果应用程序不将接收的数据读走&#xff0c;它们就会一直停留在tcp缓冲区中&#xff09;

  • RST标志&#xff0c;表示要求对方重新建立连接。携带RST标志的tcp报文段为复位报文段

  • SYN标志&#xff0c;表示请求建立一个连接。携带SYN标志的tcp报文段为同步报文段

  • FIN标志&#xff0c;表示通知对方本端要关闭连接了。携带FIN标志的tcp报文段为结束报文段

  • 16位窗口大小&#xff1a;是tcp流量控制的一个手段。这里说的窗口&#xff0c;指的是接收通告窗口。它告诉对方本端的tcp接收缓冲区还能容纳多少字节的数据&#xff0c;这样对方就可以控制发送数据的速度

  • 16位校验和&#xff1a;由发送端填充&#xff0c;接收端对tcp报文段执行CRC算法以校验tcp报文段在传输过程中是否损坏。注意&#xff0c;这个校验不仅包括tcp头部&#xff0c;也包括数据部分。这也是tcp可靠传输的一个重要保障。

  • 16位紧急指针&#xff1a;是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一个字节的序号。因此&#xff0c;确切的说&#xff0c;这个字段是紧急指针相对当前序列号的偏移&#xff0c;称为紧急偏移。tcp的紧急指针是发送端向接收端发送紧急数据的方法

  • 16位选项&#xff1a;TCP头部的最后一个选项字段可变长的可选信息。这部分最多包含40字节&#xff0c;因为TCP头部最长是60字节&#xff08;其中还包含前面讨论的20字节的固定部分&#xff09;。典型的TCP头部选项结构如图所示。

/* TCP header */
typedef u_int tcp_seq;
struct sniff_tcp
u_short th_sport; /* source port (16bits)*/
u_short th_dport; /* destination port (16bits)*/
tcp_seq th_seq; /* sequence number (32bits)*/
tcp_seq th_ack; /* acknowledgement number (32bits)*/
u_char th_offx2; /* data offset, rsvd (8bits,待分割)*/
#define TH_OFF(th) (((th)->th_offx2 & 0xf0) >> 4)
u_char th_flags;
#define TH_FIN 0x01
#define TH_SYN 0x02
#define TH_RST 0x04
#define TH_PUSH 0x08
#define TH_ACK 0x10
#define TH_URG 0x20
#define TH_ECE 0x40
#define TH_CWR 0x80
#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
u_short th_win; /* window */
u_short th_sum; /* checksum */
u_short th_urp; /* urgent pointer */
;

推荐阅读
  • 本文详细记录了作者从7月份的提前批到9、10月份正式批的秋招经历,包括各公司的面试流程、技术问题及HR面的常见问题。通过这次秋招,作者深刻体会到了技术积累和面试准备的重要性。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 配置多VLAN环境下的透明SQUID代理
    本文介绍如何在包含多个VLAN的网络环境中配置SQUID作为透明网关。网络拓扑包括Cisco 3750交换机、PANABIT防火墙和SQUID服务器,所有设备均部署在ESXi虚拟化平台上。 ... [详细]
  • 本文深入探讨了网络编程中的基本概念,如指针、引用和可重入函数,并详细介绍了OSI七层模型和TCP/IP四层模型的功能与协议。同时,文章还对比了HTTP与HTTPS的区别,分析了HTTP请求报文的结构,讨论了TCP与UDP的主要差异,以及滑动窗口协议的工作原理。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文深入探讨了计算机网络的基础概念和关键协议,帮助初学者掌握网络编程的必备知识。从网络结构到分层模型,再到传输层协议和IP地址分类,文章全面覆盖了网络编程的核心内容。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ... [详细]
author-avatar
最最时尚搭配攻略_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有